/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BL;

import BE.Enunciado;
import BE.EnunciadoPt;
import BE.Hallazgo;
import BE.PapelTrabajo;
import BE.PlantillaPapelTrabajo;
import BE.Proyecto;
import BE.Recomendacion;
import BE.Seccion;
import BE.SeccionPt;
import DAO.ProyectoDao;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.List;

/**
 *
 * @author CarLita
 */
public class ProyectoBl {

    ProyectoDao proyectoDao;

    public ProyectoBl(){
        proyectoDao = new ProyectoDao();
    }

    public Proyecto buscarPorId(int idProyecto) {
        return proyectoDao.buscarPorId(idProyecto);
    }

    public boolean eliminarPorId(int idProyecto) {
        return proyectoDao.eliminarPorId(idProyecto);
    }

    public List buscarPorCriterios(Proyecto p) {
        return proyectoDao.buscarPorCriterios(p);
    }

    public boolean guardar(Proyecto proyecto) {
        return proyectoDao.guardar(proyecto);
    }
    
    public int buscarIdPorNombre(String nombre){
        return proyectoDao.buscarIdPorNombre(nombre);
    }
    
    public int guardarEstructuraProyecto(Proyecto proyecto, int idMarcoReferencia){
            if (idMarcoReferencia>-1){
            List papelesTrabajo = new PlantillaPapelTrabajoBl().buscarPorIdMarco(idMarcoReferencia);
            for (Object o: papelesTrabajo){                
                guardarPapelTrabajo((PlantillaPapelTrabajo)o, proyecto);
            }
        }
        return 0;
    }

    private void guardarPapelTrabajo(PlantillaPapelTrabajo plantilla, Proyecto proyecto) {
        PapelTrabajo p = new PapelTrabajo();  
        
        p.setPlantillaPapelTrabajo(plantilla);
        System.out.println("Papel trabajo: "+ p.getPlantillaPapelTrabajo().getIdPlantillaPt()+"-"+ plantilla.getNombre());
        p.setIdPlantillaPt(plantilla.getIdPlantillaPt());
        p.setDescripcion(plantilla.getDescripcion());
        p.setProyecto(proyecto);
        System.out.println("Proyecto: "+ proyecto.getIdproyecto() + " - "+ proyecto.getNombre());
        p.setNombre(plantilla.getNombre());
        new PapelTrabajoBl().grabar(p);
        
        //guardar secciones
        Object[] secciones = new SeccionBl().buscarPorIdPlantilla(plantilla.getIdPlantillaPt());
        for (Object o: secciones){
            guardarSeccion((Seccion)o,p);
        }
    }
    
    private void guardarSeccion(Seccion seccion, PapelTrabajo papel){
        SeccionPt s = new SeccionPt();
        
        s.setCorrelativo(seccion.getCorrelativo());
        s.setDescripcion(seccion.getDescripcion());
        s.setTitulo(seccion.getTitulo());
        s.setTipo(seccion.getTipo());
        s.setIdPapelTrabajo(papel.getIdPapelTrabajo());
        System.out.println("Seccion: " + seccion.getIdSeccion() +
                " - "+ seccion.getTitulo());
        s.setCorrelativoSuperior1(seccion.getCorrelativoSuperior1());
        s.setCorrelativoSuperior2(seccion.getCorrelativoSuperior2());
        
        s.setIdseccionSuperior1(seccion.getIdseccionSuperior1());
        s.setIdseccionSuperior2(seccion.getIdseccionSuperior2());
               
        int id = new SeccionPtBl().grabar(s);
        s.setIdSeccionPt(id);
        //grabar enunciados
        EnunciadoBl eBl = new EnunciadoBl();
        List enunciados = eBl.buscarPorSeccion(seccion.getIdSeccion());
        EnunciadoPt e;
        EnunciadoPtBl ePtBl = new EnunciadoPtBl();
        for (Object o: enunciados){
            Enunciado enunciado = (Enunciado)o;
            e = new EnunciadoPt();
            e.setCorrelativo(enunciado.getCorrelativo());
            e.setEnunciado(enunciado.getEnunciado());
            System.out.println("Enunciado " + enunciado.getCorrelativo() +
                " : "+ enunciado.getEnunciado());                     
            e.setSeccionPtByIdSeccion(s);
            System.out.println("Seccion " + s.getIdSeccionPt() +
                " : "+ s.getTitulo());                     
            ePtBl.guardar(e);
        }
    }

    public void generarInforme(Proyecto proyecto) {
        FileWriter fichero = null;
        PrintWriter pw = null;
        try
        {
            String s= "Informe - "+proyecto.getNombre()+ ".txt";
            fichero = new FileWriter("C:\\InformesDocCAAT\\"+s);
            pw = new PrintWriter(fichero);
			
            int i=1;    
            
            pw.println("Hallazgos");
            pw.println("=========");
            
            List hallazgos = new HallazgoBl().buscarPorIdProyecto(proyecto.getIdproyecto());
            for (Object o : hallazgos){
                Hallazgo h = (Hallazgo)o;
                pw.println("Hallazgo "+ i +":" +h.getTitulo()+"\n");                                                
                pw.println("Descripción");
                pw.println(h.getHallazgo()+ "\n");                
                pw.println("Score de materialidad de la evidencia: "+h.getScore());                
                pw.println("Riesgo");
                pw.println(h.getRiesgo()+ "\n");                
                pw.println("Recomendación");
                pw.println(h.getRecomendacion()+ "\n\n");                
                i++;
            }
            
            //imprimir recomendaciones
            pw.println("Recomendaciones generales");
            pw.println("=========================");
            i=1;
            List recomendaciones = new RecomendacionBl().buscarPorIdProyecto(proyecto.getIdproyecto());
            for (Object o: recomendaciones){
                Recomendacion r = (Recomendacion)o;
                pw.println("Recomendacion "+ i+ ": "+ r.getTitulo()+"\n");
                pw.println(r.getRecomendacion()+"\n");
                pw.println("Nivel de importancia: "+ r.getScore()+ "\n\n");                                
                i++;
            }            

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           if (null != fichero)
              fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
    }
    



}
